package server

import (
	"fmt"
	"net"
	"time"
)

type Server struct {
	Name string  //服务名称
	NetVersion string //网络版本
	Ip string  //
	Port int //监听端口
}

func (s *Server) Start(){
	fmt.Printf("服务%s 启动： 网络地址【%s:%d】, 网络协议%s", s.Name, s.Ip, s.Port, s.NetVersion)

	go func() {
		//创建TCP传输层对象
		addr, err := net.ResolveTCPAddr(s.NetVersion, fmt.Sprintf("%s:%d", s.Ip, s.Port))

		if err != nil {
			fmt.Println(err.Error())
			return
		}

		listiner, err :=net.ListenTCP(s.NetVersion, addr)

		if err != nil{
			fmt.Println(err.Error())
			return
		}

		for{
			conn, err := listiner.AcceptTCP()
			if err != nil{
				fmt.Println(err.Error())
				continue //连接失败，跳过当前连接
			}

			go func() {
				for{
					buf := make([]byte, 512)
					num, err := conn.Read(buf)
					if err != nil{
						fmt.Println(err.Error())
						continue
					}
					fmt.Printf("%s\n", buf)
					if _,err := conn.Write(buf[:num]); err != nil{
						fmt.Println(err.Error())
						continue
					}
				}
			}()
		}

	}()
}

func (s *Server) Serve(){
	s.Start()

	for{
		time.Sleep(10 * time.Minute)
	}
}